package cn.tedu.user.management.dao.persist.repository;

import cn.tedu.rtms.commons.pojo.vo.PageData;
import cn.tedu.user.management.pojo.entity.Job;
import cn.tedu.user.management.pojo.vo.JobListItemVO;
import cn.tedu.user.management.pojo.vo.JobRawVO;
import cn.tedu.user.management.pojo.vo.JobStandardVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 处理职位数据的数据访问接口
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
public interface IJobRepository {


    /**
     * 插入职位数据
     *
     * @param job 职位数据
     * @return 受影响的行数
     */
    int insert(Job job);

    /**
     * 批量插入职位数据
     *
     * @param jobList 若干个职位数据的集合
     * @return 受影响的行数
     */
    //int insertBatch(List<Job> jobList);

    /**
     * 根据职位id删除职位数据
     *
     * @param id 职位id
     * @return 受影响的行数
     */
    int deleteById(Long id);

    /**
     * 批量删除职位
     *
     * @param idList 需要删除的若干个职位的id
     * @return 受影响的行数
     */
    //int deleteByIds(Collection<Long> idList);

    /**
     * 根据职位id修改职位的数据
     *
     * @param job 封装了职位id和新的数据的对象
     * @return 受影响的行数
     */
    //int updateById(Job job);

    /**
     * 统计职位数据的数量
     *
     * @return 职位数据的数量
     */
    //int count();

    /**
     * 根据职位名统计职位数据的数量
     *
     * @param jobName 职位名
     * @return 匹配职位名的职位数据的数据
     */
    int countByJobName(String jobName);

    /**
     * 根据手机号码统计职位数据的数量
     *
     * @param phone 手机号码
     * @return 匹配手机号码的职位数据的数据
     */
    //int countByPhone(String phone);

    /**
     * 根据电子邮箱统计职位数据的数量
     *
     * @param email 电子邮箱
     * @return 匹配电子邮箱的职位数据的数据
     */
    //int countByEmail(String email);

    /**
     * 根据职位id查询职位数据详情
     *
     * @param id 职位id
     * @return 匹配的职位数据详情，如果没有匹配的数据，则返回null
     */
    JobStandardVO getStandardById(Long id);

    /**
     * 根据职位名查询职位的登录信息
     *
     * @param jobname 职位名
     * @return 匹配的职位的登录信息，如果没有匹配的数据，则返回null
     */
    //JobLoginInfoVO getLoginInfoByJobname(String jobname);

    /**
     * 查询职位数据列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 职位数据列表
     */
    PageData<JobListItemVO> list(Integer pageNum, Integer pageSize);

    /**
     * 根据id修改职位数据
     *
     * @param job 封装了职位id和新数据的对象
     * @return 受影响的行数
     */
    int update(Job job);

    /**
     * 统计非某id但名称匹配的相册数据的数量，用于检查是否存在其它数据使用了相同的名称
     *
     * @param id   相册ID
     * @param jobName 职位职位名
     * @return 匹配名称但不匹配ID的数据的数量
     */
    int countByJobNameAndNotId(@Param("id") Long id, @Param("jobName") String jobName);

    /*
    * 根据职位名称获取职位Id
    */
    Long selectJobIdByJobName(String jobName);

    /*
    *
    * 查看同名职位数量
    */
    int countBySectionJobId(Long id);

    /*
    * 根据section_job表中的id查询sectionName和jobName等相关数据
    */
    JobRawVO getInfoById(Long id);

    /**
     *
     * 通过关键字查询职位列表
     *
     */
    List<JobListItemVO> selectByKeywords(String keywords);
}
